using BW.WMS.CodeEnum;
using BW.WMS.WCL.DTO;
using System;
using System.Threading.Tasks;
using Volo.Abp.Application.Services;

namespace BW.WMS.WCL
{
    /// <summary>
    /// 库存管理服务接口
    /// </summary>
    public interface IInventoryService : IApplicationService
    {
        /// <summary>
        /// 查询库存列表
        /// </summary>
        /// <param name="input">查询条件</param>
        /// <returns>库存查询结果</returns>
        Task<ApiResult<InventoryQueryResultDto>> GetInventoryListAsync(InventoryQueryDto input);

        /// <summary>
        /// 获取库存统计信息
        /// </summary>
        /// <param name="input">查询条件</param>
        /// <returns>库存统计信息</returns>
        Task<ApiResult<InventoryStatisticsDto>> GetInventoryStatisticsAsync(InventoryQueryDto input);

        /// <summary>
        /// 导出库存数据
        /// </summary>
        /// <param name="input">查询条件</param>
        /// <returns>导出文件路径</returns>
        Task<ApiResult<string>> ExportInventoryAsync(InventoryQueryDto input);

        /// <summary>
        /// 获取货品类型列表
        /// </summary>
        /// <returns>货品类型列表</returns>
        Task<ApiResult<System.Collections.Generic.List<string>>> GetProductTypesAsync();

        /// <summary>
        /// 获取单位列表
        /// </summary>
        /// <returns>单位列表</returns>
        Task<ApiResult<System.Collections.Generic.List<string>>> GetUnitsAsync();

        /// <summary>
        /// 创建库存记录
        /// </summary>
        /// <param name="input">创建库存信息</param>
        /// <returns>创建结果</returns>
        Task<ApiResult<InventoryDetailDto>> CreateInventoryAsync(CreateInventoryDto input);

        /// <summary>
        /// 更新库存记录
        /// </summary>
        /// <param name="input">更新库存信息</param>
        /// <returns>更新结果</returns>
        Task<ApiResult<InventoryDetailDto>> UpdateInventoryAsync(UpdateInventoryDto input);

        /// <summary>
        /// 删除库存记录
        /// </summary>
        /// <param name="input">删除库存信息</param>
        /// <returns>删除结果</returns>
        Task<ApiResult<bool>> DeleteInventoryAsync(DeleteInventoryDto input);

        /// <summary>
        /// 根据ID获取库存详情
        /// </summary>
        /// <param name="id">库存记录ID</param>
        /// <returns>库存详情</returns>
        Task<ApiResult<InventoryDetailDto>> GetInventoryByIdAsync(Guid id);
    }
} 